#pragma once
#include<vector>
#include<utility>
namespace zcg
{
	enum Status
	{
		EMPTY,
		EXIST,
		DELETE
	};

	template<class K, class V>
	struct HashData
	{
		pair<K, V> _kv;
		Status _s;
	};
	
	template<class K,class V>
	class HashTable
	{	
	public:
		typedef HashData<K, V> HashData;
		HashTable()
		{
			_table.resize(10);
		}
		bool Insert(const pair<K,V> &kv)
		{
			if (_n * 10 / _table.size() == 7)
			{
				size_t newSize = _table.size() * 2;
				HashTable<K, V> newHT;
				newHT._table.resize(newSize);
				for (size_t i = 0; i < _table.size(); i++)
				{
					if (_table[i]._s == EXIST)
					{
						newHT.Insert(_tables[i]._kv);
					}
				}
			}
			size_t hashi = kv.first % _tables.size();
			while (_tables[hashi]._s == EXIST)
			{
				hashi++;
				hashi %= _tables.size();
			}
			_table[hashi]._kv = kv;
			_table[hashi]._s = EXIST;
			++_n;
		}
	private:
		vector<HashData> _table;
		size_t _n = 0;
	};




}
